package com.aidisp.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import org.hibernate.Session;

public interface BaseDao {
	/**
	 * 保存
	 * @param t
	 */
	public <T> void save(T t);
	/**
	 * 批量保存
	 * @param collection
	 */
	public <T> void batchSave(Collection<T> collection);
	/**
	 * 更新
	 * @param t
	 */
    public <T> void update(T t);
    /**
     * 批量更新
     * @param collection
     */
    public <T> void batchUpdate(Collection<T> collection);
    /**
     * 删除
     * @param t
     */
    public <T> void delete(T t);
    /**
     * 批量删除
     * @param collection
     */
    public <T> void batchDelete(Collection<T> collection);
    /**
     * 通过id以get方式获取实体
     * @param clazz
     * @param id
     * @return
     */
    public <T> T getById(Class<T> clazz,Serializable id);
    /**
     * 通过id以load方式获取实体
     * @param clazz
     * @param id
     * @return
     */
    public <T> T loadById(Class<T> clazz, Serializable id);
    /**
     * 查询所有实体
     * @param clazz
     * @return
     */
    public <T> List<T> findAllEntity(Class<T> clazz);
    
    @SuppressWarnings("rawtypes")
	public <T> List<T> findAllEntityJoinFetch(Class<T> clazz,List<Class> clazzs);
    
    /**
     * 获取分页数据
     * @param queryName
     * @param pageSize
     * @param currentPageNo
     * @param parms
     * @return
     */
    public <T> PageResult<T> getPageResultByNamedQuery(String namedQuery,int pageSize, int currentPageNo,Object... paramValues);
    public <T> PageResult<T> getPageResultByHQL(String hql,int pageSize, int currentPageNo,Object... paramValues);
    public <T> List<T> executeQueryByHQL(String hql,Class<T> clazz,Object... paramValues);
    public <T> List<T> executeQueryByNamedQuery(String namedQuery,Class<T> clazz,Object... paramValues);
    
    public void clearSession(Session session);
    public Session getSession();
}
